package untiring.helper;

import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Component;

@Component("captchaUtil")
public class SimpleCaptchaUtil {
	// captcha:프로그램을 조작하는 대상이 인간인지 아님 기계인지를 판단하는 장치
	// 화면에 인간이면 누구나 판별가능한 문자/숫자/기호를 표시하고, 그것을 올바르게 입력해야 인간임이 확인됨.
	// 구글의 무료 captcha: recaptcha.net
	
	public void captcha(HttpServletResponse res , HttpSession sess) throws IOException{
		
		// captcha에 표시할 문자열을 난수로 생성
		Random r = new Random();
		String token = Long.toString(r.nextLong(),36);
		String ch = token.substring(1,3);
		sess.setAttribute("captcha", ch); //세션저장
		
		//난수를 그림으로 표시하기 위해 이미지를 하나 만듬
		BufferedImage image = new BufferedImage(300, 80, BufferedImage.TYPE_INT_RGB);
		Graphics2D g2d = image.createGraphics();
		
		// 글자색 지정
		g2d.setColor(Color.YELLOW);
		GradientPaint gp = //그라디언트 색 지정
				new GradientPaint(30,30,Color.ORANGE,15 ,25, Color.WHITE,true);
		g2d.setPaint(gp);
		
		//배경색 지정
		g2d.setBackground(Color.BLACK);
		//글자테 크기지정
		Font f = new Font("Verdana",Font.CENTER_BASELINE,55);
		g2d.setFont(f);
		g2d.drawString(ch, 10, 60);
		g2d.dispose();
		
		//메모리내에 생성된 이미지를 바로 클라이언트의 응답으로 전송
		OutputStream out = res.getOutputStream();
		ImageIO.write(image, "png", out);
		out.flush();
		out.close();
		
	}
}
